A common problem that is faced in many different computing environments is how a limited amount of resources should be allocated, in order to efficiently and effectively perform computing tasks. In the cloud computing environment, as one example, it can be difficult to determine which virtual machine out of a number of available virtual machines is best-suited to execute an incoming job. As another example, in the context of a multi-core processor, it can be challenging to determine the most effective way to assign the cores to execute different blocks of instructions.
Current resource allocation systems possess a number of limitations. For example, many current systems require computing resources to be modeled in an inflexible fashion, so that changes in the way that resources are modeled are difficult to implement. Additionally, in many systems, the performance of resources over time is not monitored (or is monitored in an ineffective way), such that the systems are unable to react to changing conditions at the different resources. Thus, the technologies described herein, which overcome the above-mentioned issues and well as other related issues, would be advantageous.